/*
 * Catalogador.h
 *
 *  Created on: 30/05/2011
 *      Author: Jonathan
 */

#ifndef CATALOGADOR_H_
#define CATALOGADOR_H_
#include "estructuras/storePalabras/StorePalabras.h"
#include "estructuras/lista/Lista.h"
#include "estructuras/catalogador/NodoCatalogo.h"
#include "managers/autores/AutoresManager.h"

#include <string>
using namespace std;

/*
 *
 */
class Catalogador {
private:
	NodoCatalogo *raiz;
	AutoresManager * autores;
	string determinarMejorPalabra(Lista<StorePalabras*> & archivoEntrenamiento);
	void entrenarRec(NodoCatalogo *&,
			Lista<StorePalabras*> & archivoEntrenamiento);
	NodoCatalogo * entrenarRec(Lista<StorePalabras*> & archivoEntrenamiento);
	void filtrarListaPorExistencia(string palabra,
			Lista<StorePalabras*> &lineas, Lista<StorePalabras*> &listaNo,
			Lista<StorePalabras*> &listaSi);
	float calcularEntropia(float lineasAutor1, float lineasAutor2);
	Lista<Contador> ListaPalabrasSinDuplicados(Lista<StorePalabras*> &lista, Comparador<Contador> * ordenamiento);
	float contarLineasPorAutor(string autor, Lista<StorePalabras*> &lineas);
	void borrarRec(NodoCatalogo * nodoActual);
	string autorCorrespondiente(Lista<StorePalabras*> & archivoEntrenamiento);
	string determinarAutorRec(NodoCatalogo *& nodo, StorePalabras & linea);

public:
	Catalogador();
	virtual ~Catalogador();
	void entrenar(Lista<StorePalabras*> & archivoEntrenamiento);
	string determinarAutor (StorePalabras &);
};

#endif /* CATALOGADOR_H_ */
